package br.edu.ifrn.sgp.resources;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;

import br.edu.ifrn.geral.negocio.ProcessadorLogin;
import br.edu.ifrn.sgp.arq.dominio.Usuario;
import br.edu.ifrn.sgp.arq.exception.ArqException;
import br.edu.ifrn.sgp.arq.exception.NegocioException;
import br.edu.ifrn.sgp.arq.util.ValidatorUtil;
import br.edu.ifrn.sgp.dtos.CampusDTO;
import br.edu.ifrn.sgp.dtos.PessoaDTO;
import br.edu.ifrn.sgp.dtos.ServidorDTO;
import br.edu.ifrn.sgp.dtos.UnidadeDTO;
import br.edu.ifrn.sgp.dtos.UsuarioDTO;

@Path("/login")
public class LoginResource {
	
	@GET
    @Produces("application/json")
    public Response logar(@QueryParam("usuario") String login,@QueryParam("senha") String senha){
		
		Response response;
		
    	Usuario usuario = new Usuario();
    	usuario.setLogin(login);
    	usuario.setSenha(senha);
    	
    	ProcessadorLogin p = new ProcessadorLogin();
		p.setUsuario(usuario);
		
		try {
			usuario = (Usuario) p.execute();
			
			if (ValidatorUtil.isEmpty(usuario)){
				response = Response.status(Response.Status.OK).entity(null).build();
				return response;
			}
			
    		UsuarioDTO usuarioDTO = new UsuarioDTO();
    		usuarioDTO.setEmail(usuario.getEmail());
    		usuarioDTO.setId(usuario.getId());
    		usuarioDTO.setLogin(usuario.getLogin());
    		usuarioDTO.setTipoUsuario(usuario.getTipoUsuario().toString());
    		usuarioDTO.setUltimoAcesso(usuario.getUltimoAcesso());
    		usuarioDTO.setPessoa(new PessoaDTO());
    		usuarioDTO.getPessoa().setId(usuario.getPessoa().getId());
    		usuarioDTO.getPessoa().setNome(usuario.getPessoa().getNome());
    		usuarioDTO.getPessoa().setCpf(usuario.getPessoa().getCpf());
    		usuarioDTO.setServidor(new ServidorDTO());
    		usuarioDTO.getServidor().setId(usuario.getServidor().getId());
    		usuarioDTO.getServidor().setCategoria(usuario.getServidor().getCategoria().toString());
    		usuarioDTO.getServidor().setRegime(usuario.getServidor().getRegime().toString());
    		usuarioDTO.getServidor().setSiape(usuario.getServidor().getSiape());
    		usuarioDTO.getServidor().setSituacao(usuario.getServidor().getSituacao().toString());
    		usuarioDTO.getServidor().setUnidade(new UnidadeDTO());
    		usuarioDTO.getServidor().getUnidade().setId(usuario.getServidor().getUnidade().getId());
    		usuarioDTO.getServidor().getUnidade().setNome(usuario.getServidor().getUnidade().getNome());
    		usuarioDTO.getServidor().getUnidade().setSigla(usuario.getServidor().getUnidade().getSigla());
    		usuarioDTO.getServidor().getUnidade().setCampus(new CampusDTO());
    		usuarioDTO.getServidor().getUnidade().getCampus().setId(usuario.getServidor().getUnidade().getCampus().getId());
    		usuarioDTO.getServidor().getUnidade().getCampus().setNome(usuario.getServidor().getUnidade().getCampus().getNome());
    		usuarioDTO.getServidor().getUnidade().getCampus().setSigla(usuario.getServidor().getUnidade().getCampus().getSigla());
    		
    		response = Response.status(Response.Status.OK).entity(usuarioDTO).build();
	    	return response;
			
		} catch (ArqException e) {
			e.printStackTrace();
			return response = Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
		} catch (NegocioException e) {
			return response = Response.status(Response.Status.OK).entity(null).build();
		}
    	
    }
}
